// 遮蔽 Shadowing

// 在 JavaScript 中，当变量 x 在一定作用域内声明，然后另一个同名变量在一个较低的作用域声明，会发生变量的遮蔽

var shadowed = 0;

function argShadow(shadowed) {
    return ["Value is", shadowed].join(" ");
}

console.log(argShadow(108)); // Value is 108
console.log(argShadow()); // Value is 

// 遮蔽变量同样发生在闭包内
function captureShadow(shadowed) {
    return function(shadowed) {
        return shadowed + 1;
    }
}

var closureShadow = captureShadow(108);
console.log(closureShadow(2)); // 3

// 因此在书写 JavaScript 代码时避免遮蔽变量，所以要注意变量的命名

